package cn.com.gridinfo.sooc.core.course.info;

import android.graphics.Color;
import android.os.Bundle;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RatingBar;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
import android.widget.TextView;

import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.jeremy.arad.Arad;
import com.jeremy.arad.utils.Log;
import com.jeremy.arad.utils.StringUtils;
import com.squareup.picasso.Picasso;

import org.apache.http.message.BasicNameValuePair;

import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import cn.com.gridinfo.sooc.R;
import cn.com.gridinfo.sooc.base.BaseSoocFragment;
import cn.com.gridinfo.sooc.common.LocalMark;
import cn.com.gridinfo.sooc.core.course.classes.bean.CourseDetailsInfo;
import cn.com.gridinfo.sooc.core.course.info.activity.CourseStandActivity;
import cn.com.gridinfo.sooc.core.course.info.adapter.NoticeAdapter;
import cn.com.gridinfo.sooc.core.course.note.common.CodeConst;
import cn.com.gridinfo.sooc.core.course.note.dao.CourseDao;
import cn.com.gridinfo.sooc.utils.DateUtil;
import cn.com.gridinfo.sooc.utils.IntentUtil;
import cn.com.gridinfo.sooc.utils.MessageUtils;
import cn.com.gridinfo.sooc.utils.widget.MyExpandTextView;
import cn.com.gridinfo.sooc.utils.widget.UnScrollListView;
import cn.com.gridinfo.sooc.utils.widget.textview.HtmlImageGetterUtil;

/**
 * 课程——详情界面
 * Created by yingchunli on 2015/12/30.
 */
public class InfoFragment extends BaseSoocFragment {

    View view;//当前界面
    @InjectView(R.id.kcmc_info)
    TextView kcmc;//课程名称
    @InjectView(R.id.lsmc_info)
    TextView lsmc;//老师名称
    @InjectView(R.id.xxrs_info)
    TextView xxrs;//学习人数
    @InjectView(R.id.time_info)
    TextView time;//课程通知  时间
    @InjectView(R.id.judge)
    RatingBar judge;//评价
    @InjectView(R.id.summary_container)
    LinearLayout summaryContainer;//课程简介区域
    @InjectView(R.id.notice_container)
    LinearLayout noticeContainer;//课程通知区域
    @InjectView(R.id.summary_info)
    TextView summary;//简介的内容
    @InjectView(R.id.noticeText_info)
    MyExpandTextView notice;//课程通知的内容
    @InjectView(R.id.show_all)
    RelativeLayout noticeLayout;//课程通知的最新一条的文本
    CourseDao dao;
    String kcid = "";//课程id
    @InjectView(R.id.notice_list)
    UnScrollListView noticeList;//通知列表数据
    @InjectView(R.id.course_info_scrollview)
    ScrollView mScrollView;
    NoticeAdapter adapter;//适配器
    boolean noticetextVis = false;//通知是否展开
    CourseDetailsInfo courseInfo;//课程详情信息
    @InjectView(R.id.ls_img)
    ImageView lsImg;//老师头像
    @InjectView(R.id.u_yx)
    TextView uYx;//老师院系
    @InjectView(R.id.price)
    TextView price;//价钱
    private int select;//课程是否加入
    int pddj;//评价等级
    View viewDilag;//评价对话框布局
    TextView textView;//评价对话框的提示语
    RatingBar ratingBar;//评价对话框的星级

    public static InfoFragment newInstance(CourseDetailsInfo courseInfo) {
        Bundle args = new Bundle();
        InfoFragment fragment = new InfoFragment();
        args.putSerializable("courseInfo", courseInfo);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.course_info, null);
        ButterKnife.inject(this, view);
        dao = new CourseDao(this);
//        Arad.bus.register(this);

        courseInfo = (CourseDetailsInfo) getArguments().getSerializable("courseInfo");//获取课程详情信息
        kcid = courseInfo.getKcid();
        Log.d("kcid->" + kcid);
        //获取简介
        dao.getCourseSummary(kcid, CodeConst.COURSE_GET_COURSE_SUMMARY);
        //获取通知
        dao.getCourseNotice(kcid, CodeConst.COURSE_GET_COURSE_NOTICE);
//       //获取课程详情
        showCourseInfo();

        return view;
    }
//
//    /**
//     * 加入课程成功，更新学习人数
//     *
//     * @param eventCode
//     */
//    public void onEventMainThread(EventCode eventCode) {
//        //更新学习人数
//        if (eventCode.getCode() == 100) {
//            xxrs.setText(courseInfo.getXxrs() + "人学习");//设置学习人数
//        }
//    }

    @Override
    public void onRequestSuccess(int requestCode) {
        try {
            if (dao.getStatus().equals("0")) {
                switch (requestCode) {
                    case 0://获取评价区域信息
                        break;
                    case CodeConst.COURSE_GET_COURSE_SUMMARY://获取简介
                        if (dao.getKcjj() == null || StringUtils.isNull(dao.getKcjj())) {
                            //无简介信息时，不显示简介区域
                            summaryContainer.setVisibility(View.VISIBLE);
                        } else {
                            //简介内容不为空时
                            summaryContainer.setVisibility(View.VISIBLE);

                            summary.setText(Html.fromHtml(dao.getKcjj(), new HtmlImageGetterUtil(getActivity(), summary, 100), null));
                        }
                        break;
                    case CodeConst.COURSE_GET_COURSE_NOTICE://获取通知
                        if (dao.getNoticeList() == null || dao.getNoticeList().size() < 1) {
                            //无通知信息时，不显示通知区域
                            noticeContainer.setVisibility(View.GONE);
                        } else {
                            //有通知信息时
                            time.setText(DateUtil.getDateFromDatestamp(dao.getNoticeList().get(0).getInput_time()));
                            notice.setText(dao.getNoticeList().get(0).getTznr());//显示第一条内容
//                            if (notice.getLineCount() > 1) {
//                                notice.setSingleLine(true);
//                                notice.setEllipsize(TextUtils.TruncateAt.END);
//                            }else {
//                                showMore.setVisibility(View.GONE);
//                            }
                            noticeContainer.setVisibility(View.VISIBLE);
                            initView();//初始化通知列表
                        }
                        break;
                    case CodeConst.COURSE_GET_COURSE_JUDGE://获取课程评价
                        if (select == 0) {
                            MessageUtils.showImageShortToast(getContext(), "未加入课程不可评价哦");
                        } else {
                            if (dao.getIsJudge().equals("1")) {
                                //可以评价
                                goJudge();
                            } else {
                                showJudgeTip();
                            }
                        }
                        break;
                }
            } else {
                MessageUtils.showImageShortToast(getActivity(), dao.getStatusCode());
            }
        } catch (Exception e) {
            MessageUtils.showImageShortToast(getActivity(), "请求数据异常");
            Log.d("Exception的异常信息：" + e.toString());
        }
    }

    /**
     * 显示不能评价的提示
     */
    void showJudgeTip() {
        initDialogView();
        ratingBar.setIsIndicator(true);
        textView.setVisibility(View.VISIBLE);
        new MaterialDialog.Builder(getActivity())
                .backgroundColor(Color.WHITE)
                .title("课程评价")
                .titleColor(getResources().getColor(R.color.color_tv333))
                .customView(viewDilag, true)
                .positiveText(R.string.agree)
                .positiveColor(getResources().getColor(R.color.colorAccent))
                .show();
    }

    /**
     * 初始化评价对话框的布局
     */
    void initDialogView() {
        viewDilag = LayoutInflater.from(getActivity()).inflate(R.layout.course_judge, null);
        ratingBar = (RatingBar) viewDilag.findViewById(R.id.judge);
        textView = (TextView) viewDilag.findViewById(R.id.tip);
    }

    /**
     * 去评价
     */
    void goJudge() {
        initDialogView();
        textView.setVisibility(View.GONE);
        ratingBar.setEnabled(true);
        new MaterialDialog.Builder(getActivity())
                .backgroundColor(Color.WHITE)
                .title("课程评价")
                .titleColorRes(R.color.color_tv333)
                .customView(viewDilag, true)
                .positiveText(R.string.agree)
                .positiveColorRes(R.color.colorAccent)
                .onPositive(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(MaterialDialog materialDialog, DialogAction dialogAction) {
                        //提交课程评价
                        Log.d("kcid=" + kcid);
                        Log.d("count=" + ratingBar.getRating());
                        if (ratingBar.getRating() > 0) {
                            dao.judge(kcid, ratingBar.getRating() + "", CodeConst.COURSE_GET_COURSE_JUDGE_SUBMIT);
                        } else {
                            MessageUtils.showImageShortToast(getActivity(), "请选择评分");
                        }
                    }
                })
                .show();
    }

    /**
     * 初始化通知列表
     */
    private void initView() {
        adapter = new NoticeAdapter(dao.getNoticeList(), getActivity());
        noticeList.setAdapter(adapter);
        setListViewHeight(noticeList);
        mScrollView.post(new Runnable() {
            public void run() {
                mScrollView.fullScroll(ScrollView.FOCUS_UP);
            }
        });

    }

    /**
     * 显示课程详情信息
     */
    public void showCourseInfo() {
        if (!courseInfo.getU_img().equals("")) {
            lsImg.setVisibility(View.VISIBLE);
            Picasso.with(getActivity()).load(courseInfo.getU_img()).resize(40, 40).into(lsImg);
            if (!courseInfo.getU_img().equals("")) {
                uYx.setText(courseInfo.getU_yx());
                uYx.setVisibility(View.VISIBLE);
            }
            lsmc.setText(courseInfo.getUname());//设置老师名称
        } else {
            lsImg.setVisibility(View.GONE);
            lsmc.setText("主讲老师: " + courseInfo.getUname());//设置老师名称
        }

        //课程价钱  根据平台是否收费显示
        if (Arad.preferences.getBoolean(LocalMark.IS_PAY.getName())) {
            if (courseInfo.getIs_charge().equals("0")) {
                price.setText("免费");
                price.setTextColor(getResources().getColor(R.color.green));
            } else {
                price.setText("￥" + courseInfo.getPrice());
                price.setTextColor(getResources().getColor(R.color.red_hint));
            }
        }
        kcmc.setText(courseInfo.getKcmc());//设置课程名称
        xxrs.setText(courseInfo.getXxrs() + "人学习");//设置学习人数
        pddj = Integer.parseInt(courseInfo.getPddj());
        Log.d("课程星级=" + pddj);
        //显示课程的星级
        judge.setRating(pddj);
        select = courseInfo.getSelect();
    }

//    /**
//     * 评价点击  去评价
//     */
//    @OnClick(R.id.judge_info)
//    void onJudgeClick() {
//        //去评价
//        dao.judge(kcid, null, CodeConst.COURSE_GET_COURSE_JUDGE);
//    }

    //结课标准
    @OnClick(R.id.course_stand_rl)
    void onClick() {
        IntentUtil.intentSlidIn(getActivity(), CourseStandActivity.class, 00, new BasicNameValuePair("kcid", courseInfo.getKcid()));
    }

    /**
     * 课程通知  显示全部的点击
     */
    @OnClick(R.id.notice_show_layout)
    void onNoticeClick() {
        if (!noticetextVis) {
            //显示所有的课程通知
            noticeList.setVisibility(View.VISIBLE);//显示列表
            noticeLayout.setVisibility(View.GONE);//隐藏第一条最新通知的文本
            noticetextVis = true;
        } else {
            noticetextVis = false;
            noticeList.setVisibility(View.GONE);//隐藏列表
            noticeLayout.setVisibility(View.VISIBLE);//显示第一条最新通知的文本
        }
    }

//    /**
//     * 显示完整的课程通知
//     */
//    @OnClick(R.id.show_all)
//    void onShowMoreClick() {
//        if (notice.getLineCount() == 1) {
//            //当文本为一行时，需要扩展全部内容
//            notice.setSingleLine(false);
//        } else {
//            //当文本正常显示时，点击后，显示一行，带有省略号
//            notice.setSingleLine(true);
//            notice.setEllipsize(TextUtils.TruncateAt.END);
//        }
//    }


    /**
     * 重新计算ListView的高度，解决ScrollView和ListView两个View都有滚动的效果，在嵌套使用时起冲突的问题
     *
     * @param listView
     */
    public void setListViewHeight(ListView listView) {
        // 获取ListView对应的Adapter
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            return;
        }
        int totalHeight = 0;
        for (int i = 0, len = listAdapter.getCount(); i < len; i++) { // listAdapter.getCount()返回数据项的数目
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0); // 计算子项View 的宽高
            totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        ButterKnife.reset(this);
    }
}